﻿#ifndef __SS_VECTOR2_H__
#define __SS_VECTOR2_H__
#include "../3dMath/ss3dMathDefine.h"

namespace StarSeeker
{
/////////////////////////////////ssFLOAT2X////////////////////////////////
class ssFLOAT2X : public ssFLOAT2
{
public:
	ssFLOAT2X(void);
	ssFLOAT2X(ssfloat fx, ssfloat fy);
	ssFLOAT2X(const ssFLOAT2X &sf2);
	void operator=(const ssFLOAT2X &sf2);

	operator ssfloat* ();
	operator const ssfloat* () const;

	void Set(ssfloat fx, ssfloat fy);
	void Set(const ssfloat *fVal);
	void Zero();
	//近似0向量
	bool IsZero(ssfloat eps = Math3D::gc_EPSILON_E6);
	//两个向量近似相等
	bool IsApproximate(const ssFLOAT2X& val, ssfloat eps = Math3D::gc_EPSILON_E6);
	//取反
	void Against();
	//求模
	ssfloat Length() const;
	//求模的平方
	ssfloat SquaredLength() const;
	//单位化
	void Normalize();
	ssFLOAT2X Normalized() const;
	//点乘
	ssfloat Dot(const ssFLOAT2X& val) const;
	//叉乘
	ssfloat Cross(const ssFLOAT2X& val) const;
	//模近似0
	bool IsZeroLength() const;

	ssFLOAT2X operator + (const ssFLOAT2X& val) const;
	ssFLOAT2X operator - (const ssFLOAT2X& val) const;
	ssFLOAT2X operator * (const ssFLOAT2X& val) const;
	ssFLOAT2X operator / (const ssFLOAT2X& val) const;
	ssFLOAT2X operator + (ssfloat val) const;
	ssFLOAT2X operator - (ssfloat val) const;
	ssFLOAT2X operator * (ssfloat val) const;
	ssFLOAT2X operator / (ssfloat val) const;

	void operator += (const ssFLOAT2X& val);
	void operator -= (const ssFLOAT2X& val);
	void operator *= (const ssFLOAT2X& val);
	void operator /= (const ssFLOAT2X& val);
	void operator += (ssfloat val);
	void operator -= (ssfloat val);
	void operator *= (ssfloat val);
	void operator /= (ssfloat val);

	bool operator == (const ssFLOAT2X& val) const;
	bool operator != (const ssFLOAT2X& val) const;
};
typedef ssFLOAT2X ssVector2;
//常量0向量
const ssFLOAT2X cg_zeroFloat2(0.f,0.f);
///////////////////////////////////////////////////////////////////////////
}
#endif
